/*
     ESXX - The friendly ECMAscript/XML Application Server
     Copyright (C) 2007-2010 Martin Blom <martin@blom.org>

     This program is free software: you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public License
     as published by the Free Software Foundation, either version 3
     of the License, or (at your option) any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.


     PLEASE NOTE THAT THIS FILE'S LICENSE IS DIFFERENT FROM THE REST OF ESXX!
*/

package ph.gov.marikina.mcsmtms.services.impl;

import java.net.*;
import java.util.concurrent.TimeUnit;
import org.apache.http.conn.*;
import org.apache.http.params.*;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.scheme.*;

public class GAEConnectionManager
  implements ClientConnectionManager {
  
  public GAEConnectionManager() {
    SocketFactory no_socket_factory = new SocketFactory() {
	public Socket connectSocket(Socket sock, String host, int port, 
				    InetAddress localAddress, int localPort, 
				    HttpParams params) {
	  return null;
	}

	public Socket createSocket() {
	  return null;
	}

	public boolean isSecure(Socket s) {
	  return false;
	}
      };

    schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("http",  no_socket_factory, 80));
    schemeRegistry.register(new Scheme("https", no_socket_factory, 443));
  }


  @Override public SchemeRegistry getSchemeRegistry() {
    return schemeRegistry;
  }

  @Override public ClientConnectionRequest requestConnection(final HttpRoute route, 
							     final Object state) {
    return new ClientConnectionRequest() {
      public void abortRequest() {
	// Nothing to do
      }

      public ManagedClientConnection getConnection(long timeout, TimeUnit tunit) {
	return GAEConnectionManager.this.getConnection(route, state);
      }
    };
  }

  @Override public void releaseConnection(ManagedClientConnection conn, 
					  long validDuration, TimeUnit timeUnit) {
  }

  @Override public void closeIdleConnections(long idletime, TimeUnit tunit) {
  }

  @Override public void closeExpiredConnections() {
  }

  @Override public void shutdown() {
  }

  private ManagedClientConnection getConnection(HttpRoute route, Object state) {
    return new GAEClientConnection(this, route, state);
  }

  private SchemeRegistry schemeRegistry;
}
